/*
 * FontProvider.java
 *
 * Created on 2008/08/25 +0900
 *
 * $Revision: 38 $
 * $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */

package org.gikolet.framework.ui;

/**
 * @author tetsutaro (latest modification by $Author: tetsutaro.ss $)
 * @version $Revision: 38 $ $Date: 2008-10-11 08:48:45 +0000 (Sat, 11 Oct 2008) $
 */
public interface FontProvider {
    /**
     * この端末でサポートする物理的なフォントサイズが入った配列を返す。 <br>
     * ただし、ほぼすべての物理的なフォントサイズをサポートする端末では、nullを返す場合がある.
     */
    int[] getSupportedFontSizes();

    boolean isSupportedFontSize(int fontSize);

    boolean isSupportedFreeFontSize();

    /**
     * この端末でのデフォルトフォントを設定する。
     */
    void setDefaultNativeFont(Font font);

    /**
     * この端末でのデフォルトフォントを返す。
     */
    Font getDefaultFont();

    /**
     * 引数で指定したフォントを返す。 端末によっては指定したフォントにならない可能性もある。
     * 対応していない引数の場合IllegalArgumentExceptionがスローされる。 faceには
     * <ul>
     * <li>Font#FACE_MONOSPACE</li>
     * <li>Font#FACE_PROPORTIONAL</li>
     * <li>Font#FACE_SYSTEM</li> が指定できる。 styleには
     * <ul>
     * <li>Font#STYLE_BOLD</li>
     * <li>Font#STYLE_ITALIC</li>
     * <li>Font#STYLE_PLAIN</li>
     * <li>Font#STYLE_UNDERLINED</li>
     * </ul>
     * が指定できる。 sizeには
     * <ul>
     * <li>Font#SIZE_LARGE</li>
     * <li>Font#SIZE_MEDIUM</li>
     * <li>Font#SIZE_SMALL</li>
     * <li>Font#SIZE_TINY</li>
     * </ul>
     * もしくは端末がサポートする物理的なフォントサイズが指定できる。 また、次のように論理和を使って複数組み合わせることができる。
     *
     * <pre>
     * Font f = getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD | Font.STYLE_ITALIC, Font.SIZE_MEDIUM);
     * </pre>
     *
     * ただし、Font#STYLE_PLAINはFont#STYLE_UNDERLINEDとしか組み合わせることはできない。
     */
    Font createFont(int face, int style, int size);
}
